/* ============================================================================
* 功能描述 ：zigbee通讯数据解析打包层
* 作者       ：ggls
* 创建日期 ：2024.04.11
* ----------------------------------------------------------------------------
* 更新历史 ：
*	日期 　　- 修改者   : 更新内容描述
*
* ============================================================================
*/


#include "main.h"


static zigbee_app_s zigbee_app;		// zigbee数据
bit x = 0;
u8 Distribution_time = 0;			// 配网时间

bit Distribution_flag = 0;
bit san = 0;   // 配网闪

u32 serial_number = 0;
u32 pei_time = 0;
u32 tongbu_time = 0;
char js;


static void _hly_zigbee_ctx_init(void)
{
	zigbee_app.ed_type		= DEV_ZIGBEE_LCE; 	// 初始化设备类型
	zigbee_app.ed_Endpoint	= 1;				// 初始化设备端点
	zigbee_app.app_data[0] 	= SHORT_GET_HIGH_BYTE(HEADER);		// 帧头第一位
	zigbee_app.app_data[1] 	= SHORT_GET_LOW_BYTE(HEADER);		// 帧头第二位
	
	zigbee_app.app_data[2] 	= ZIGBEE_VER;	// zigbee版本
	zigbee_app.network_status = 0;			// 初始化网络状态
	
}

static unsigned short seq_num_get(void)
{
	serial_number ++;
	if(serial_number > 0xfff0){
		serial_number = 1;
	}
	return serial_number;
}


#if 0
static void Zigbee_Network_Access(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x22;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 数据长度 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 数据内容 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
}


static void Zigbee_Network_Out(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x22;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 数据长度 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x03;			// 数据内容 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
}

static void _hly_query_network_status(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x23;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
	

}

static void _hly_zigbee_set_Endpoint(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;							// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x22;						// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;						// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = zigbee_app.ed_Endpoint;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}


static void _hly_zigbee_start_protocol_stack(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;							// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x26;						// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;						// 数据长度 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;						// 数据长度 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
}


static void _hly_zigbee_set_dev(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;											// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;										// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x23;										// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;										// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;										// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(DEV_ZIGBEE_LCE);		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(DEV_ZIGBEE_LCE);			// 数据内容 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}

static void _hly_zigbee_set_manufacturer_name(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;			// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;		// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x06;		// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x0A;		// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 00;			// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 00;			// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x65;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x57;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x65;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x4c;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x69;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x6e;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x6b;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}


static void _hly_zigbee_ready_reply(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x41;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据内容 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
	zigbee_app.zigbee_ready_flag = 1;
	
	
}

void Hly_zigbee_up_temp(signed short t)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;											// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;										// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x24;										// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;										// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x06;										// 数据长度	低字节
	
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;										
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;										// 温度属性	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;										// 温度属性	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(t);						// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(t);						// 数据内容 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;										
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}


void Hly_zigbee_up_hum(signed short h)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;											// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;										// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x24;										// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;										// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x06;										// 数据长度	低字节
	
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;										
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;										// 湿度属性 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x03;										// 湿度属性 地字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(h);						// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(h);						// 数据内容 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;										
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
}

void Hly_Zigbee_Nerwork_query(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x23;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);


}

void Hly_Zigbee_Restart(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x22;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;			// 数据长度 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 数据长度 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x04;			// 数据内容 低字节
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}

void Hly_Packet_ModelId(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x24;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x09;		// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x53;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x36;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x31;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}

void Hly_Packet_manufacturername(void)
{
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = 0;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x24;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x14;		// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 00;			// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 00;			// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x5f;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x5a;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x33;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x5f;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x76;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x61;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x61;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x72;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x73;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x63;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x72;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x64;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		
	zigbee_app.app_data[zigbee_app.app_len++] = specialSumCheck(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}

#endif
void all_data_update(void)
{				
    Hly_tuya_updata(DPID_BATTERY_PERCENTAGE, app_data.power_supply,4, DP_TYPE_VALUE);						
	delayms(500); 
    Hly_tuya_updata(DPID_MAXTEMP_SET, app_data.upper_limit_temp,4, DP_TYPE_VALUE);		
	delayms(500); 
    Hly_tuya_updata(DPID_MINITEMP_SET, app_data.lower_limit_temp,4, DP_TYPE_VALUE); 	
	delayms(500); 
    Hly_tuya_updata(DPID_MAXHUM_SET, app_data.upper_limit_hum,4, DP_TYPE_VALUE); 		
	delayms(500); 
    Hly_tuya_updata(DPID_MINIHUM_SET, app_data.lower_limit_hum,4, DP_TYPE_VALUE); 	 
	delayms(500); 
	Hly_tuya_updata(DPID_TEMP_SENSITIVITY, app_data.temp_sensitivity,4, DP_TYPE_VALUE); 		
	delayms(500); 
    Hly_tuya_updata(DPID_HUM_SENSITIVITY, app_data.humi_sensitivity,4, DP_TYPE_VALUE); 		
}


void Hly_tuya_updata(dpid_cmd type ,int up_data, char lenthg, char types)
{
	u32 seq;
	char len;
		seq = seq_num_get();

	len = 9 + lenthg;
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = seq;			// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x27;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		
	zigbee_app.app_data[zigbee_app.app_len++] = len;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0xef;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		
	zigbee_app.app_data[zigbee_app.app_len++] = type;			// dpID		
	zigbee_app.app_data[zigbee_app.app_len++] = types;			// 数据类型
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(lenthg);		
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(lenthg);	
	if(lenthg == 0x04)
	{
		zigbee_app.app_data[zigbee_app.app_len++] = S32_GET_3_BYTE(up_data);		
		zigbee_app.app_data[zigbee_app.app_len++] = S32_GET_2_BYTE(up_data);		
		zigbee_app.app_data[zigbee_app.app_len++] = S32_GET_1_BYTE(up_data);		
		zigbee_app.app_data[zigbee_app.app_len++] = S32_GET_0_BYTE(up_data);	
	}
	if(lenthg == 0x01)
	{
		zigbee_app.app_data[zigbee_app.app_len++] = up_data;	
	}
		
	zigbee_app.app_data[zigbee_app.app_len++] = checksum(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);


}

void Hly_Packet_ModelId(void)
{
	u32 seq;
	seq = seq_num_get();
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = seq;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x24;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x0a;		// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// 数据内容 高字节
#if 1
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x53;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x36;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x31;		
#else
	zigbee_app.app_data[zigbee_app.app_len++] = 0x53;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x4e;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x5a;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x42;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x2d;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		
	zigbee_app.app_data[zigbee_app.app_len++] = 0x34;

#endif
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		
	zigbee_app.app_data[zigbee_app.app_len++] = checksum(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}

void Hly_Packet_manufacturername(void)
{
	u32 seq;
	seq = seq_num_get();
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = seq;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = 0x24;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		// 数据长度	高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x14;		// 数据长度	低字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 00;			// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 00;			// 数据内容 高字节
#if 1
	zigbee_app.app_data[zigbee_app.app_len++] = 0x5f;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x5a;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x45;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x32;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x30;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x5f;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x71;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x72;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x7a;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x74;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x63;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x33;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x65;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x76;		// 数据内容 高字节
#else
	zigbee_app.app_data[zigbee_app.app_len++] = 0x53;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x4f;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x4e;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x4f;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x46;		// 数据内容 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = 0x46;		// 数据内容 高字节



#endif
	zigbee_app.app_data[zigbee_app.app_len++] = 0x00;		
	zigbee_app.app_data[zigbee_app.app_len++] = checksum(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}


void Hly_Packet_device_manage(device_manage_cmd type, char len, signed short h, char types)
{
	u32 seq;
	seq = seq_num_get();
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = seq;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x01;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = type;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(len);		// 数据长度 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(len);		// 数据长度 低字节
	if(len > 0)
	{
		if(types == 0) // 温度
		{
			zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						
			zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						// 温度属性	高字节
			zigbee_app.app_data[zigbee_app.app_len++] = 0x00;						// 温度属性	低字节
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(h);		// 数据内容 高字节
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(h);		// 数据内容 低字节
			zigbee_app.app_data[zigbee_app.app_len++] = 0x00;						

		}
		if(types == 1) // 湿度
		{
			zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						
			zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						// 湿度属性 高字节
			zigbee_app.app_data[zigbee_app.app_len++] = 0x03;						// 湿度属性 低字节
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(h); 	// 数据内容 高字节
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(h);		// 数据内容 低字节
			zigbee_app.app_data[zigbee_app.app_len++] = 0x00;						

		}
		if(types == 2) // 获取时间
		{
		
			zigbee_app.app_data[zigbee_app.app_len++] = 0x01;						
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(h);		// 数据内容 高字节
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(h); 		// 数据内容 低字节

		}
		if(types == 3)	// 准备就绪回复
		{
			zigbee_app.app_data[zigbee_app.app_len++] = h;	

		}
		if(types == 22) // 设置端点数量
		{
			zigbee_app.app_data[zigbee_app.app_len++] = h;		
		}
		if(types == 23) // 设置设备类型
		{
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(h);		// 数据内容 高字节
			zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(h); 		// 数据内容 低字节
		}
		

	}
	zigbee_app.app_data[zigbee_app.app_len++] = checksum(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}


void Hly_Packet_Network_msg(network_manage_cmd type, char len, signed short h)
{
	u32 seq;
	seq = seq_num_get();
	zigbee_app.app_len = 3;
	zigbee_app.app_data[zigbee_app.app_len++] = seq;				// 传输序列号
	zigbee_app.app_data[zigbee_app.app_len++] = 0x02;			// CmdType
	zigbee_app.app_data[zigbee_app.app_len++] = type;			// Cmd
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_HIGH_BYTE(len);		// 数据长度 高字节
	zigbee_app.app_data[zigbee_app.app_len++] = SHORT_GET_LOW_BYTE(len);		// 数据长度 低字节
	if(len > 0)
	{
		zigbee_app.app_data[zigbee_app.app_len++] = h;		// 数据内容
	}
	zigbee_app.app_data[zigbee_app.app_len++] = checksum(zigbee_app.app_data,zigbee_app.app_len);			// 校验位
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);

}

void Zigbee_Network_Status(void)
{

#if 1
	if(zigbee_app.network_status == 0 || zigbee_app.network_status == 2 || zigbee_app.network_status == 3)
	{
		Hly_Packet_Network_msg(control_zigbee_status, 1, 1);	
		delayms(200);
		Hly_Packet_Network_msg(query_current_network_status, 0, 0);
	
	}
	else if(zigbee_app.network_status == 1)
	{
		Hly_Packet_Network_msg(control_zigbee_status, 1, 3);
		delayms(20);
		Hly_Packet_Network_msg(query_current_network_status, 0, 0);
		
	
	}

	Distribution_flag = 1;
#else
	_hly_zigbee_up_temp();

#endif

}


void Zigbee_Device_Manage(unsigned char *dev_data, char lenthg)
{
	switch(dev_data[5])
	{
		case zigbee_ready:
			Zigbee_wake_up();
			delayms(20);
			Hly_Packet_device_manage(zigbee_ready_back, 1, 0, 3);
			Zigbee_sleep();
			zigbee_app.zigbee_ready_flag = 1;
			break;
		case read_device_Endpoint:

			break;
		case read_device_type:

			break;
		case read_device_attribute:

			break;
		case modify_device_attribute:

			break;
		case request_device_Report_attr:
			Zigbee_wake_up();
			delayms(20);
			all_data_update();
			Zigbee_sleep();
			break;
			
		case zigbee_Issue_instructions:			
			App_ZigbeeData_Receive_handle(dev_data, lenthg);
			break;
		case mcu_ready_reply:

			break;
		case mcu_set_Endpoint_reply:
			if(dev_data[8] == 00)
			{
				
			}
			break;
		case mcu_set_device_type_reply:
			if(dev_data[8] == 00)
			{
				
			}
			
			break;
		case report_device_attribute_reply:

			break;
		case request_appoint_property_reply:				
			app_update_time(dev_data, lenthg);
			break;
		case start_zigbee_protocol_reply:
			if(dev_data[8] == 00)
			{
				
			}
			break;
		default:
			break;

	}
		
	
}


void Zigbee_Network_Manage(unsigned char *net_data, int lenthg)
{
	switch(net_data[5])
	{
		case notify_network_status:
			zigbee_app.network_status = net_data[8];
            if (zigbee_app.network_status != 0x02 && zigbee_app.network_status != 0x03) {
                Write_Lcd_Storage(net_state, zigbee_app.network_status);
				Seg_Set_Data();
            }
			break;
		case query_network_status:	
			zigbee_app.network_status = net_data[9];
			if (net_data[8] == 0x00  && net_data[9] != 0x03 && zigbee_app.network_status != 0x02) 
			{
                Write_Lcd_Storage(net_state, zigbee_app.network_status);
				Seg_Set_Data();
            }
			break;
		case query_network_tip:
		case notify_off_network:
		case control_Network_Policy:
		case control_network_status:	
			if(net_data[8] == 0)
			{
				Distribution_flag = 1;	
				Hly_Packet_Network_msg(query_current_network_status, 0, 0);

			}
			break;
		case query_Communication_Status:
			break;
		default:
			break;

	}
		
	
}

void Hly_ctx_init()
{
	zigbee_app.app_len = 0;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x41;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x2b;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x59;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x50;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x45;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0xf1;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0xa9;				
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
}

void bl_Packet_Network_msg()
{
	zigbee_app.app_len = 0;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x41;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;				
	zigbee_app.app_data[zigbee_app.app_len++] = 0x2b;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x50;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x41;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x49;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x52;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x53;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x41;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x52;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x54;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x20;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x35;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x20;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x34;
	zigbee_app.app_data[zigbee_app.app_len++] = 0x31;
	Uart_Tx_buf(zigbee_app.app_data,zigbee_app.app_len);
}

#if 1
void Zigbee_Config_Set(void)
{
	if(zigbee_app.zigbee_ready_flag == 1)
	{
		Zigbee_wake_up();
		delayms(20);
		Hly_Packet_device_manage(set_device_type, 2, DEV_ZIGBEE_LCE, 23);
		delayms(500);
		Hly_Packet_device_manage(set_number_of_endpoints, 1, zigbee_app.ed_Endpoint, 22);
		delayms(500); 
		Hly_Packet_device_manage(gujian_leix, 1, 1, 3);
		delayms(500); 
		Hly_Packet_device_manage(start_Protocol_stack, 0, 0, 0);
		delayms(500);
		Hly_Packet_ModelId();
		delayms(500);
		Hly_Packet_manufacturername();
		delayms(500);
		Hly_Packet_Network_msg(query_current_network_status, 0, 0);
				
		Zigbee_sleep();
		zigbee_app.zigbee_ready_flag = 0;

	}
	
	if(zigbee_app.network_status == 0x00 || zigbee_app.network_status == 0x02)
	{
		if(js == 0)
		{
			Hly_button_Event();
			js = 1;
		}
		x = 0;
		kaji_sb = 0;
		key_scan();
		Distribution_time = 0;
	}
	if(zigbee_app.network_status == 0x01)
	{

		if(x == 0)
		{
			x = 1;
			Zigbee_wake_up();
			delayms(15);
			Hly_button_Event();
			delayms(500);
			Hly_Packet_device_manage(get_specified_properties, 3, 1, 2);						// 获取时间
			Zigbee_sleep();
		}
		
		if(hly_get_elapsed_s(tongbu_time) >= 5)
		{
			tongbu_time = get_current_s();	
			if(sj_f == 0)
			{
				Zigbee_wake_up();
				delayms(500);
				Hly_Packet_device_manage(get_specified_properties, 3, 1, 2);						// 获取时间
				Zigbee_sleep();

			}
			if(kaji_sb == 0 )
			{
				key_sleep = 0;
				kaji_sb = 1;
				
				Zigbee_wake_up();
				hly_Obtain_voltage();
				delayms(15);
				
				Hly_tuya_updata(DPID_BATTERY_PERCENTAGE, app_data.power_supply,4, DP_TYPE_VALUE);						
				delayms(500);
				Hly_button_Event();
				delayms(500);
				
				all_data_update();
				Hly_Packet_device_manage(get_specified_properties, 3, 1, 2);						// 获取时间
				delayms(500);
				Zigbee_sleep();
			}

		}
		
		
		js = 0;
        key_scan();
		Distribution_time = 0;

	}
	
	if(zigbee_app.network_status == 0x03)
	{
		while(zigbee_app.network_status == 0x03)
		{
		
			Zigbee_Cmd_handle();			// 串口数据接收
			key_scan();
			js = 0;
			kaji_sb = 0;
			x = 0;
			
			if(hly_get_elapsed_ms(pei_time) >= 200)
			{
				pei_time = get_current_ms();					
				if(san == 0)  
				{
					Seg_san_off();
					san = 1;
				}
				else if(san == 1)
				{
					Seg_san_on();
					san = 0;
					Distribution_time++;
				}

			}

			if(Distribution_time == 150)
			{
				Zigbee_wake_up();
				delayms(15);
				Hly_Packet_Network_msg(control_zigbee_status, 1, 2);
				zigbee_app.network_status = 0;
				delayms(2);
				Distribution_time = 0;
				Zigbee_sleep();
	
			}

		}
		
		
	}
}



#endif
void Zigbee_App_Init(void)
{

	_hly_zigbee_ctx_init();

		
}


